function _new(Fn, ...params) {
  // 1. 创建一个空对象实例obj，并使 obj.__proto__ === Fn.prototype
  var obj = Object.create(Fn.prototype)
  // 2. 执行Fn，并让this指向obj
  var self = this,
  res = Fn.call(obj, ...params)
  // 3. 根据res的数据类型，返回结果
  var typeofRes = typeof res
  if (res!=null && (typeofRes === 'object' || typeofRes === 'function')) return res
  return obj
}
const p1 = new Person1('xu')
const p2 = new Person2('xu')
const p3 = new Person3('xu')
console.log('原生new方法', p1, p2, p3)
const p4 = _new(Person1, 'liu')
const p5 = _new(Person2, 'liu')
const p6 = _new(Person3, 'liu')
console.log('手动实现new方法', p4, p5, p6)